Abstract Factory vs Factory Method
Abstract Factory provides an interface for creating families of related objects that are designed to work together. Factory Method generally focuses on creating one product through an overridable or encapsulated creation method. I use Abstract Factory when multiple products must remain compatible as a family, such as UI controls for different operating systems or database components for different vendors.
Factory Method typically creates one product through a method.
Abstract Factory creates a family of related products.
Abstract Factory helps preserve compatibility between products in the same family.
It is useful when the product family varies by environment, platform or vendor.
Do not introduce Abstract Factory merely because several classes exist.